package com.jing.product.mapper;

import com.jing.product.domain.dto.ProductCategoryRecursionDTO;
import com.jing.product.domain.dto.ProductDTO;
import com.jing.product.domain.dto.ProductResultDTO;
import com.jing.product.domain.po.*;
import com.jing.product.domain.vo.ProductVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author：HaoYunde
 * @Package：com.jing.product.mapper
 * @Project：Jing
 * @name：ProductMapper
 * @Date：2024/5/23 21:07
 */
public interface ProductMapper {
    /**
     * 获取商品分类信息递归
     * @return
     */
    List<ProductCategoryRecursionDTO> list();

    /**
     * 添加商品信息
     * @param product
     * @return
     */
    int saveProductInfo(Product product);

    /**
     * 添加会员价格
     * @param productMemberPrice
     */
    void addProductMemberPrice(ProductMemberPrice productMemberPrice);

    /**
     * 添加阶梯价格
     * @param productLadder
     */
    void addProductLadder(ProductLadder productLadder);

    /**
     * 添加满减价格
     * @param productFullReduction
     */
    void addProductFullReduction(ProductFullReduction productFullReduction);


    /**
     * 添加特惠促销
     * @param productPromotion
     */
    void addProductPromotion(ProductPromotion productPromotion);


    /**
     * 添加图片
     * @param img
     */
    void addImg(@Param("img") List<Img> img);


    /***
     * 添加sku
     * @param productSkuStocks
     */
    void addProductSku(@Param("productSkuStocks") List<ProductSkuStock> productSkuStocks);

    /**
     * 根据商品sn查询商品信息
     * @param productSn
     * @return
     */
    List<ProductDTO> findProductByProductSn(String productSn);

    /**
     * 查询商品列表
     * @param productVO
     * @return
     */
    List<ProductDTO> findProductList(@Param("productVO") ProductVO productVO);


    /**
     * 删除商品表
     * @param id
     * @return
     */
    int delect(Integer id);

    /**
     * 删除图片表
     * @param id
     */
    void delectImg(Integer id);

    /**
     * 修改商品信息
     * @param product
     * @return
     */
    int update(ProductDTO product);

    /**
     * 修改商品上架状态
     * @param id
     * @param publishStatus
     * @return
     */
    int updatepublishStatus(@Param("id") Integer id, @Param("publishStatus") Integer publishStatus);

    /**
     * 修改商品是否新品
     * @param id
     * @param newStatus
     * @return
     */
    int updatenewStatus(@Param("id") Integer id, @Param("newStatus") Integer newStatus);

    /**
     * 修改商品是否推荐
     * @param id
     * @param recommandStatus
     * @return
     */
    int updaterecommandStatus(@Param("id") Integer id, @Param("recommandStatus") Integer recommandStatus);

    void addProductAttributeValue(@Param("productAttributeValues") List<ProductAttributeValue> productAttributeValues);

    ProductResultDTO getUpdateInfo(Long id);
}
